package com.open.capacity.lisenter;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.stereotype.Component;
/**
 * 监听死信队列，并进行消息消费确认
 */
@Component
public class AckListener implements ChannelAwareMessageListener {
    @RabbitListener(queues = "Dead-Queue")
    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        System.out.println(new String(message.getBody()+"......"));
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try{
            //改变订单状态,同时将订单的日期从假占据变为真占据，前端如果扫描到该订单日期是假占据，虽然不能点击下单，但是会提示该订单已有人下单，但会未付款，可稍后重试。
            //业务代码。。。
            channel.basicAck(deliveryTag,false);//确认消息，
            System.out.println("消息已确认");
        }catch (Exception e){
            channel.basicNack(deliveryTag,false,true);
            System.out.println("消息确认失败， 重回死信队列");
        }
    }
}


